﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Configuration;

namespace Rizmar
{
    public partial class UsuarioForm : Form
    {
        public UsuarioForm()
        {
            InitializeComponent();
        }

        private void cancelarButton_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void okButton_Click(object sender, EventArgs e)
        {
            if (usuarioTextBox.Text.Length > 0 && senhaTextBox.Text.Length > 0)
            {
                SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString());
                cn.Open();
                string str, msg;
                bool confirma = true;
                using (SqlCommand cmd = new SqlCommand("SELECT * FROM [Usuario] WHERE usuario = '" + usuarioTextBox.Text + "'", cn))
                {
                    SqlDataReader dr = cmd.ExecuteReader();

                    char admin;
                    if (adminCheckBox.Checked) admin = '1';
                    else admin = '0';

                    if (dr.HasRows)        // usuário já existente. Altera senha e privilégios
                    {
                        str = @"
                        UPDATE [Usuario] 
                            SET senha = '" + geramd5(senhaTextBox.Text) + "', admin = " + admin + @"
                        WHERE usuario = '" + usuarioTextBox.Text + "'";

                        msg = "Usuário " + usuarioTextBox.Text + " alterado com sucesso!";
                    }
                    else                   // novo usuário. Inserir.
                    {
                        var confirmacao = MessageBox.Show ("Usuário não existe. Deseja criá-lo?", "Confirmação", MessageBoxButtons.YesNo);
                        if (confirmacao == DialogResult.No)
                            confirma = false;
                        str = @"
                        INSERT INTO [Usuario] 
                            VALUES ('" + usuarioTextBox.Text + "', '" + geramd5(senhaTextBox.Text) + "', " + admin + ", 1)";

                        msg = "Usuário " + usuarioTextBox.Text + " criado com sucesso!";
                    }
                    dr.Close();
                }
                if (confirma)
                {
                    using (SqlCommand atualizacmd = new SqlCommand(str, cn))
                    {
                        // MessageBox.Show(str, "Query");
                        atualizacmd.ExecuteNonQuery();
                    }
                    MessageBox.Show(msg);
                }
                cn.Close();
                this.Close();
            }
            else MessageBox.Show("Campos inválidos!");
        }

        public string geramd5(string input)
        {
            System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();
            byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
            byte[] hash = md5.ComputeHash(inputBytes);

            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < hash.Length; i++)
                sb.Append(hash[i].ToString("x2"));
            return sb.ToString();
        }

        private void excluirButton_Click(object sender, EventArgs e)
        {
            if (usuarioTextBox.Text.Length > 0)
            {
                SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString());
                cn.Open();
                bool confirma = true;
                /* Confirma se o usuário existe */
                using (SqlCommand cmd = new SqlCommand("SELECT * FROM [Usuario] WHERE usuario = '" + usuarioTextBox.Text + "'", cn))
                {
                    SqlDataReader dr = cmd.ExecuteReader();
                    if (dr.HasRows)    // usuário inexistente
                    {
                        var confirmacao = MessageBox.Show("Tem certeza de que deseja excluir o usuário?", "Confirmação", MessageBoxButtons.YesNo);
                        if (confirmacao == DialogResult.No) confirma = false;
                    }
                    else
                    {
                        MessageBox.Show("Usuário inexistente", "Erro");
                        confirma = false;
                    }
                    dr.Close();
                }

                /* Deleta o usuário confirmado */
                using (SqlCommand cmd = new SqlCommand("DELETE FROM [Usuario] WHERE usuario = '" + usuarioTextBox.Text + "'", cn))
                {
                    if (confirma)
                    {
                        cmd.ExecuteNonQuery();
                        MessageBox.Show("Usuário excluído com sucesso");
                    }
                }
                cn.Close();
            }
            else MessageBox.Show("Campos inválidos!");
        }

        private void pesquisarButton_Click(object sender, EventArgs e)
        {
            PesquisaUsuarioForm janela = new PesquisaUsuarioForm(this);
            janela.Show();
        }

        public void setUserName(string username) { usuarioTextBox.Text = username; }
        public void setPassword(string password) { senhaTextBox.Text = password; }
        public void setAdmin(bool admin) { adminCheckBox.Checked = admin; }
    }
}
